package com.handtransaction.dao;

import com.handtransaction.entity.Order;
import com.handtransaction.entity.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;

@Repository
public interface OrderDao {


    /**
     * 用户对订单的操作
     * 用户只能查找与自己相关的订单，因此形参需包含一个用户自己的id来限制搜索范围
     */
    //添加订单 -- 发生交易行为的时候
    @Insert("INSERT INTO orders (obid,osid,ogid,ostatus,onumber,oprice,ogname,ogdetail,ogimgpath) " +
            "VALUES(#{obid},#{osid},#{ogid},#{ostatus},#{onumber},#{oprice},#{ogname},#{ogdetail},#{ogimgpath})")
    public int SaveOrder(Order order);

    @Insert("INSERT INTO orders (obid,osid,ogid,ostatus,onumber,oprice,ogname,ogdetail,ogimgpath,oposition,onote,obname,osname) " +
            "VALUES(#{obid},#{osid},#{ogid},#{ostatus},#{onumber},#{oprice},#{ogname},#{ogdetail},#{ogimgpath},#{oposition},#{onote},#{obname},#{osname})")
    public int SaveOrder2(Order order);


    /**
     * 根据买家id查询订单
     * @param obid
     * @return
     */
    @Select("SELECT * FROM orders WHERE obid = #{obid}")
    public List<Order> searchOrdersByobid(Integer obid);

    /**
     * 根据卖家id查询订单
     * @param osid
     * @return
     */
    @Select("SELECT * FROM orders WHERE osid = #{osid}")
    public List<Order> searchOrdersByosid(Integer osid);


//买家删除自己交易过的订单---根据订单号
    @Delete("DELETE FROM orders WHERE oid = #{oid}")
    public int deleteSingleOrder(Integer oid);



    //删除订单 -- 用户删除 -- 改变订单状态

//    @Insert("INSERT INTO orders(obid,osid,ogid,ostatus,onumber,oprice) " +
//            "VALUES(#{obid},#{osid},#{ogid},#{ostatus},#{onumber},#{oprice})")
//    public int SaveOrder2(Order order);


    //查找订单 -- 根据订单号 -- 用户根据订单号只能查找到自己的订单信息
    @Select("select * from orders where oid=#{param1} and (obid=#{param2} or osid=#{param2})")
    Order selectOrderByUserByOid(int oid,int uid);
    //查找订单 -- 根据交易对方的id -- 用户根据交易对方的id只能查找到自己的订单信息
    @Select("select * from orders where (obid=#{param1} and osid=#{param2}) or (obid=#{param2} and osid=#{param1})")
    Order selectOrderByUserByUid(int myId,int hisId);
    //查找订单 -- 用户查找自己所有的订单
    @Select("select * from orders where obid=#{uid} or osid=#{uid}")
    List<Order> queryUserAllOrder(int uid);



    /**
     * 管理员对订单的操作
     */
    //删除订单 -- 管理员删除 -- 从表中移除
    @Delete("delete from orders where oid=#{oid}")
    int deleteOrderByAdmin(Integer oid);
    //修改订单 -- 管理员修改订单状态

    //查询订单 -- 根据订单号 -- 管理员可以查询任一订单信息
    @Select("select * from orders where oid=#{oid}")
    Order queryOrderByAdminByOid(Integer oid);
    //查询订单 -- 根据买方用户id -- 管理员可以查询任一订单信息
    @Select("select * from orders where obid=#{obid}")
    List<Order> queryOrderByAdminByObid(Integer obid);
    //查询订单 -- 根据卖方用户id -- 管理员可以查询任一订单信息
    @Select("select * from orders where osid=#{osid}")
    List<Order> queryOrderByAdminByOsid(Integer osid);
    //查询订单 -- 含有该用户id的订单 -- 管理员可以查询任一订单信息
    @Select("select * from orders where obid=#{uid} or osid=#{uid}")
    List<Order> queryOrderByAdminByUserId(Integer uid);
    //查询全部订单 -- 管理员可以查询全部订单信息
    @Select("select * from orders")
    List<Order> queryAllOrder();
    //得到交易总额数据
    @Select("SELECT SUM(oprice) FROM orders")
    BigDecimal sumTransactionAmount();


}
